/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [Example_04_Overloading.java]
 * Creation Date        [16-Jun-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_02_oop;

/**
 * 方法重载
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class Example_04_Overloading {

	/*
	 * I.基本数据类型: 如果没有对应参数类型, 则进行自动类型提升进行运算(注释掉方法1后测试)
	 * 
	 * II.封装类型: 如果没有对应参数类型, 则自动拆箱后寻找匹配的基本类型(注释掉方法4后测试)
	 * 
	 * III.封装类型: 既没有对应参数类型, 拆箱后也无基本数据类型与其对应, 则在拆箱后进行类型提升进行运算(注释掉方法1和4后测试)
	 */

	/**
	 * 加法运算
	 * 
	 * @param number1
	 *            加数
	 * @param number2
	 *            被加数
	 * @return 计算结果
	 */
	public int add(int number1, int number2) {
		System.out.println("int parameter...");
		return number1 + number2;
	}

	/**
	 * 加法运算
	 * 
	 * @param number1
	 *            加数
	 * @param number2
	 *            被加数
	 * @return 计算结果
	 */
	public int add(double number1, double number2) {
		System.out.println("double parameter...");
		return (int) (number1 + number2);
	}

	/**
	 * 加法运算
	 * 
	 * @param number1
	 *            加数
	 * @param number2
	 *            被加数
	 * @return 计算结果
	 */
	public int add(short number1, short number2) {
		System.out.println("short parameter...");
		return number1 + number2;
	}

	/**
	 * 加法运算
	 * 
	 * @param i1
	 *            加数
	 * @param i2
	 *            被加数
	 * @return 计算结果
	 */
	public int add(Integer i1, Integer i2) {
		System.out.println("Integer parameter...");
		return i1 + i2;
	}

	/**
	 * 测试方法
	 * 
	 * @param args
	 *            命令行参数
	 */
	public static void main(String[] args) {
		// 注释掉参数为int的方法观察运行结果
		int number1 = 10;
		int number2 = 10;
		new Example_04_Overloading().add(number1, number2);

		short s1 = 15;
		short s2 = 15;
		new Example_04_Overloading().add(s1, s2);

		// 注释掉参数为Integer的方法观察运行结果
		Integer i1 = 20;
		Integer i2 = 20;
		new Example_04_Overloading().add(i1, i2);

	}
}
